package com.ato.AnnotationTest;

/**
 * @author wangjing
 * @create 2021--11--03--19:52
 * 1：什么是注解：  代码里的特殊标记
 * 2：可以用于 包 类 构造器 方法 成员变量 参数 局部变量 这些信息被保存 Annotation的name=value中
 * 3：会用到反射，后面讲
 * JDK5.之后才支持注解， 三个基本注解
 * 1： @Override           重写方法，用于方法上
 * 2：@Deprecated          修饰元素的类，方法已过时
 * 3:@SuppressWarning("unused")     抑制编译警告
 * @SuppressWarning({"unused","rawtype"}) 抑制编译警告 : 没有使用 和  泛型 的警告：比如ArrayList要用泛型，但是你没用
 */

/**
 *  四个元注解
 *  1： @Retention  被注解的声明周期
 *  @Retention(RetentionPolicy.SOURCE) javac编译时 生成的.class文件不会包含该注解
 * 							CLASS,被编译时 保留，是一个默认的， 不会加载到JVM内存中
 * 							RUNTIME 运行时保留在.class文件，并加载在内存里，可以通过反射获取
 *
 * 	2：@Target   注解可用在哪里
 * 	                    @Target(ElementType.METHOD)
 * 	       一般我们用到上面两个源注解
 *
 * 	3：@Documented
 * 	    该注解用于生产javadoc提取成文档，所修饰的注解在被javadoc解析时，保留
 * 注意，必须设置@Retntion(RetentionPolicy.RUNTIME)
 *     如下，生成的文档中注解是保留的
 *
 *
 *    4：@Inherited
 *    表示注解可继承的
 * 比如父类用了一个注解，这个注解是可继承的，那么继承了这个父类的子类也有这个注解
 *
 *
 * JDK8以后可以重复注解，
 *  比如你想一个注解在同一个地方使用两次 这样会报错，那么可以将新建一个注解，将新建的注解的属性设置为一个数组，类型就是相同的两个注解类型
 *  public @interface MyAnno{
 *      String value();
 *  }
 *  public @interface MyAnnotations{
 *        MyAnno[] value();
 *    }
 *   然后使用
 *      @MyAnnotations({@MyAnno("hello"),@MyAnno("hi")})
 *   public class {}
 */

public class Desc {
    public static void main(String[] args) {


    }

    @MyAnnotation()
    public void say() {

    }
}
